\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f1\b0\i0\ul0\fs28 make removes files\
\
\fi-420\li440 Q:
\fc0 Every now and then, if I use control-c to interrupt a
\f0\b\fs24 make(1
\b0 )
\f1\fs28 , it decides to remove one of my files. I admit that my code isn't always the cleanest, but is my computer trying to tell me something? Is there a cure for this? \
\fi0\li0 \
\fi-440\li440 A: There is a bug in
\f0\b\fs24 make
\f1\b0\fs28 where it sometimes removes a source file instead of the target when interrupted. Here is a script of one of those nasty interchanges between you and
\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\f1\fs28\li440 As a workaround, you can add the .PRECIOUS pseudo-target in your
\b Makefile.postamble
\b0 to protect yourself from this unwanted deletion. (See below for more about .PRECIOUS) It should depend on SRCFILES (which covers CFILES, MFILES, HFILES, nibs, tiffs, etc).\
\f1\b0\fs28 normally stops if any command it generates returns a non-zero exit code. Before quitting, however, it removes the current target it is making. The assumption here is that target is probably in a partly finished state. If it were left in place, it would show as up-to-date in subsequent invocations of make, due to its now-revised date of last modification. \
\
There may be occasions when you do not want the target removed upon occurrence of errors. The .PRECIOUS: pseudo-target allows you to specify any file you do not want destroyed. For example., the description fie entry\
\f0\fs24 .PRECIOUS : target1 target2 target3\
\f1\fs28 prevents any of the three named targets from being removed by make. This entry can occur anywhere in the description file.\